package br.com.sipe.bean;

import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.arquitetura.bean.PaginableBean;
import br.com.arquitetura.excecao.ExcecaoUtil;
import br.com.arquitetura.util.FacesMessagesUtil;
import br.com.sipe.entidade.Usuario;
import br.com.sipe.util.Constantes;
import br.com.sipe.util.CpfUtil;
import br.com.sipe.util.CriptoUtil;

@ManagedBean(name = "usuarioBean")
@ViewScoped
public class UsuarioBean extends PaginableBean<Usuario> {

	private static final long serialVersionUID = -2117169483826989342L;

	@Override
	public void verificarAcesso() {
	}

	@Override
	public String save() {
		try {

			String cpf = getModel().getCpf().trim().replaceAll("[()-.]", "");
			// Validar CPF
			if (!CpfUtil.isValidCPF(cpf)) {
				FacesMessagesUtil.addErrorMessage("CPF ", "Inválido");
				return ERROR;
			}
			// retira mascara
			if (getModel().getCpf() != null && !getModel().getCpf().trim().equals("")) {
				getModel().setCpf(getModel().getCpf().trim().replaceAll("[()-.]", ""));
			}

			getModel().setSenha(CriptoUtil.getCriptografia(Constantes.SENHA_DEFAULT));

			// Validar Login unique
			Usuario user = new Usuario();
			user.setLogin(getModel().getLogin().trim());
			List<Usuario> lista = universalManager.listBy(user, false);
			if (lista != null && !lista.isEmpty() && !lista.get(0).getId().equals(getModel().getId())) {
				FacesMessagesUtil.addErrorMessage("Login ", " Já cadastrado");
				return ERROR;
			}

			// Validar Email unique
			user = new Usuario();
			user.setEmail(getModel().getEmail().trim());
			lista = universalManager.listBy(user, false);
			if (lista != null && !lista.isEmpty() && !lista.get(0).getId().equals(getModel().getId())) {
				FacesMessagesUtil.addErrorMessage("Email ", " Já cadastrado");
				return ERROR;
			}

			super.save();
		} catch (Exception e) {
			ExcecaoUtil.tratarExcecao(e);
		}

		return SUCCESS;
	}

	@Override
	public String load() {
		super.load();
		return SUCCESS;
	}

	@Override
	public Map<String, String> getFilters() {
		return null;
	}

	@Override
	public Usuario createModel() {
		return new Usuario();
	}

	@Override
	public String getQualifiedName() {
		return "Usuário";
	}

	@Override
	public boolean isFeminino() {
		return false;
	}

}
